package com.qdxht.dispenser.utils.update;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.Toast;
import com.qdxht.dispenser.http.api.API;
import com.qdxht.dispenser.ui.models.entity.BaseData;
import com.qdxht.dispenser.ui.models.entity.IVersionData;
import com.hjq.toast.ToastUtils;
import com.vector.update_app.UpdateAppBean;
import com.vector.update_app.UpdateAppManager;
import com.vector.update_app.UpdateCallback;
import com.vector.update_app.service.DownloadService;
import java.io.File;
import java.util.HashMap;
import java.util.Map;


public class VersionUpdateUtil {

	/**
	 * 获取当前应用程序的版本号
	 * @return
	 */
	public static String getVersion(Context context) {
		// 1.获取当前应用程序的包的apk信息
		PackageManager pm = context.getPackageManager();
		try {
			PackageInfo packInfo = pm.getPackageInfo(context.getPackageName(), 0);
			return packInfo.versionName;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
			// 不可能发生
			return "";
		}
	}

	/**
	 * 判断是否为最新版本，
	 * @param context
	 * @param onlineVersion
	 * @return true 最新版， false 不是最新版
	 */
	public static boolean isNewVersion(Context context,String onlineVersion) {
		// 未获取到线上版本信息
		if(onlineVersion == null || "".equals(onlineVersion.trim())){
			return true;
		}
		String version = getVersion(context);
		long v1 = getVersionLevel(onlineVersion);
		long v2 = getVersionLevel(version);
		// 线上版本大于安装版本
		if(v1 > v2){
			return false;
		}
		return true;
	}


	public static long getVersionLevel(String version) {
		String[] v = version.split("\\.");
		long level = 0;
		if(v.length > 0){
			level += Long.parseLong(v[0]) * 10000 * 10000;
		}
		if(v.length > 1){
			level += Long.parseLong(v[1]) * 10000;
		}
		if(v.length > 2){
			level += Long.parseLong(v[2]);
		}
		return level;
	}

	/**
	 * 强制更新
	 */
	public static void updateVersion(final Activity ctx) {
		Map<String,String> map = new HashMap<>();
		map.put("appCode", "ltp-driver-refined");
		map.put("appType","ANDROID");
		new UpdateAppManager
				.Builder()
				//当前Activity
				.setActivity(ctx)
				//更新地址
				.setUpdateUrl(API.URL_APPVERSION_LAST)
				//实现httpManager接口的对象
				.setHttpManager(new UpdateAppHttpUtil())
				.setPost(true)
				.setParams(map)
//				.setTopPic(R.mipmap.top_8)
//				.setThemeColor(0xffffac5d)
//				如果没有配置FileProvider 否则不能安装
//				.setTargetPath(API.URL_DOWNLOAD_PATH)
				.build()
				//检测是否有新版本
				.checkNewApp(new UpdateCallback() {
					/**
					 * 解析json,自定义协议
					 *
					 * @param json 服务器返回的json
					 * @return UpdateAppBean
					 */
					@Override
					protected UpdateAppBean parseJson(String json) {
						UpdateAppBean updateAppBean = new UpdateAppBean();
						try {
							//拿到服务器返回的数据，解析，拿到downloadUrl和一些其他的UI数据
							BaseData iData = JsonUtils.getData(json);
							if(!"0".equals(iData.getCode())){
								ToastUtils.show(iData.getMsg());
								return null;
							}
							IVersionData data = JsonUtils.fromJson(json, IVersionData.class);
							if(data == null || data.getData() == null){
								return null;
							}
							boolean isForceUpdate = data.getData().getForce() == null ? false : data.getData().getForce();
							String update = "Yes";
							if(isNewVersion(ctx,data.getData().getAppVersion())){
								update = "No";
							}
							updateAppBean
									//（必须）是否更新Yes,No
									.setUpdate(update)
									//（必须）新版本号，
									.setNewVersion(data.getData().getAppVersion())
									//（必须）下载地址
									.setApkFileUrl(data.getData().getDownloadUrl())
									//（必须）更新内容
									.setUpdateLog(data.getData().getContent())
									//大小，不设置不显示大小，可以不设置
//                                    .setTargetSize(jsonObject.optString("target_size"))
									//是否强制更新，可以不设置
									.setConstraint(isForceUpdate);
							//设置md5，可以不设置
//                                    .setNewMd5(jsonObject.optString("new_md5"));
						} catch (Exception e) {
							e.printStackTrace();
						}
						return updateAppBean;
					}


					@Override
					protected void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) {
						updateAppManager.showDialogFragment();
					}

					/**
					 * 网络请求之前
					 */
					@Override
					public void onBefore() {
					}

					/**
					 * 网路请求之后
					 */
					@Override
					public void onAfter() {
					}

					/**
					 * 没有新版本
					 */
					@Override
					public void noNewApp(String error) {
					}

				});
	}

}
